package gestorbienraizok.contratos;

import gestorbienraizok.inmuebles.Apartamento;
import gestorbienraizok.inmuebles.Inmueble;
import gestorbienraizok.usuarios.ClienteDemandador;
import gestorbienraizok.usuarios.ClienteOferente;
import java.util.Calendar;
import java.util.Date;
import static uiMain.bienRaizOk.formatearPrecio;

public abstract class Contrato {

    protected static int consecutivo = 0;
    private int codigo;
    private Date fecha;
    protected float valor;
    private ClienteDemandador demandador;
    private ClienteOferente oferente;
    private Inmueble inmueble;

    Contrato(float valor, ClienteDemandador demandador, ClienteOferente oferente, Inmueble inmueble) {
        Contrato.consecutivo++;
        this.codigo = Contrato.consecutivo;
        this.fecha = Calendar.getInstance().getTime();
        this.valor = valor;
        this.demandador = demandador;
        this.oferente = oferente;
        this.inmueble = inmueble;
    }

    public int getCodigo() {
        return this.codigo;
    }

    public Date getFecha() {
        return this.fecha;
    }

    public float getValor() {
        return this.valor;
    }

    public static int getConsecutivo() {
        return Contrato.consecutivo;
    }

    public ClienteDemandador getDemandador() {
        return this.demandador;
    }

    public ClienteOferente getOferente() {
        return this.oferente;
    }

    public Inmueble getInmueble() {
        return this.inmueble;
    }
    
    public byte getDia(){
        return (byte) this.fecha.getDate();
    }

    public byte getMes() {
        return (byte) (this.fecha.getMonth() + 1);
    }

    public int getAnho() {
        return (this.fecha.getYear() + 1900);
    }

    public String tipoDeContrato() {
        return ((this instanceof Compraventa) ? "Compraventa" : "Arrendamiento");
    }

    public String getResumen() {
        String descripcion = new String();

        String codigoContrato = String.format("%3s", this.codigo).replace(" ", "0");
        descripcion += String.format("%-16s", codigoContrato);

        descripcion += String.format("%-17s", this.inmueble.getCodigo());
        String tipo = ((this.getInmueble() instanceof Apartamento) ? "Apartamento" : "Casa");
        descripcion += String.format("%-14s", tipo);

        String direccion = this.getInmueble().getUnidad().getDireccion();
        descripcion += String.format("%-19s", direccion);

        String tipoContrato = this.tipoDeContrato();
        descripcion += String.format("%-19s", tipoContrato);
        
        String dia = String.format("%2d", this.getDia()).replace(" ", "0");
        String mes = String.format("%2d", this.getMes()).replace(" ", "0");
        String fechaDiaMesAnho = dia + "/" + mes + "/" + this.getAnho();
        descripcion += String.format("%-14s", fechaDiaMesAnho);
        
        descripcion += formatearPrecio(this.getValor());

        return descripcion;
    }

}
